package com.todod.common.util;

import java.util.regex.Pattern;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**
 * @author gsh
 * @version 创建时间：2018-9-14 下午1:12:05
 * 
 */
public class CheckData {
	static Logger log = LoggerFactory.getLogger(SpringElUtil.class);

	/**
	 * 
	 * @Title: checkNull
	 * @Description: 校验null
	 * @author：gsh
	 * @date: 2018-9-14
	 * @param data
	 * @return
	 * @return boolean 空：true
	 */
	public static boolean checkNull(String data) {
		if (data == null || data.equals("")) {
			return true;
		}
		return false;
	}

	/**
	 * 
	 * @Title: checkAll
	 * @Description: 通用性校验
	 * @author：gsh
	 * @date: 2018年12月11日
	 * @param regular 正则
	 * @param data    数据
	 * @return
	 * @return boolean 错误true
	 */
	public static boolean checkAll(String regular, String data) {
		if (regular == null || data == null)
			return true;
		if (!Pattern.compile(regular).matcher(data).matches()) {
			return true;
		}
		return false;
	}

	/**
	 * 利用正则表达式判断字符串是否是数字
	 * 
	 * @param str
	 * @return
	 */
	public static boolean isNumeric(String data) {
		String regex = "^(-)?[0-9]+(.[0-9]+)?$";

		return checkAll(regex, data);
	}

	/**
	 * 利用正则表达式判断字符串是否是整数
	 * 
	 * @param str
	 * @return
	 */
	public static boolean isIntNumeric(String data) {
		String regex = "^[0-9]+$";

		return checkAll(regex, data);
	}

	/**
	 * 利用正则表达式判断字符串是否是整数个数
	 * 
	 * @param str
	 * @return
	 */
	public static boolean isIntNumericByNum(String data, String num) {
		String regex = "^[0-9]" + num + "$";

		return checkAll(regex, data);
	}

	/**
	 * 校验手机
	 * 
	 * @Title: isPhone
	 * @Description:
	 * @author gsh
	 * @date 2019年8月20日
	 * @param data
	 * @return
	 */
	public static boolean isPhone(String data) {
		return isIntNumericByNum(data, "{11}");
	}

	/**
	 * 
	 * @Title: checkUrl
	 * @Description: 校验url
	 * @author：gsh
	 * @date: 2018年12月18日
	 * @param data
	 * @return
	 * @return boolean 错误true
	 */
	public static boolean checkUrl(String data) {
		String regex = "^(?:https?://)?[\\w]{1,}(?:\\.?[\\w%]{1,})+[\\w-_/?&=#%:\\.?]*$";

		return checkAll(regex, data);
	}

	/**
	 * 
	 * @Title: checkDate1
	 * @Description: 校验日期格式是否yyyy-MM-dd
	 * @author：gsh
	 * @date: 2018年12月18日
	 * @param data
	 * @return
	 * @return boolean 错误true
	 */
	public static boolean checkDate(String data) {
		String regex = "^(\\d{4})-(\\d{1,2})-(\\d{1,2})$";

		return checkAll(regex, data);
	}

	/**
	 * 
	 * @Title: checkDate1
	 * @Description: 校验日期格式是否yyyy/MM/dd
	 * @author：gsh
	 * @date: 2018年12月18日
	 * @param data
	 * @return
	 * @return boolean 错误true
	 */
	public static boolean checkDate1(String data) {
		String regex = "^(\\d{4})/(\\d{1,2})/(\\d{1,2})$";

		return checkAll(regex, data);
	}

	/**
	 * 校验用户名
	 * 
	 * @Title: checkUserName
	 * @Description:
	 * @author gsh
	 * @date 2019年10月19日
	 * @param data
	 * @return
	 */
	public static boolean checkUserName(String data) {
		String regex = "^[a-zA-Z0-9]{3,15}$";

		return checkAll(regex, data);
	}

	public static boolean checkUserName1(String data) {
		String regex = "^[a-zA-Z0-9]{3,7}$";

		return checkAll(regex, data);
	}

	/**
	 * 校验密码
	 * 
	 * @Title: checkUserName
	 * @Description:
	 * @author gsh
	 * @date 2019年10月19日
	 * @param data
	 * @return
	 */
	public static boolean checkPassword(String data) {
		String regex = "^[a-zA-Z0-9]{6,20}$";

		return checkAll(regex, data);
	}

	/**
	 * 校验密码
	 * 
	 * @Title: checkPassword2
	 * @Description:包含大小写和数字
	 * @author mhp
	 * @date 2019年10月19日
	 * @param data
	 * @return
	 */
	public static boolean checkPassword2(String data) {
		String regex = "^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[A-Za-z0-9]{6,15}$";

		return checkAll(regex, data);
	}

	/**
	 * 字母开头，字母数字组成，3-10位
	 * 
	 * @Title: checkField
	 * @Description:
	 * @author gsh
	 * @date 2020年7月21日
	 * @param data
	 * @return
	 */
	public static boolean checkField(String data) {
		String regex = "^[a-zA-Z]{1}[a-zA-Z0-9]{2,9}$";

		return checkAll(regex, data);
	}

	/**
	 * 校验json
	 * 
	 * @Title: isJson
	 * @Description:
	 * @author gsh
	 * @date 2020年7月22日
	 * @param content
	 * @return
	 */
	public static boolean isJsonObject(String content) {
		try {
			JSONObject.fromObject(content);
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	public static boolean isJsonArray(String content) {
		try {
			JSONArray.fromObject(content);
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	/**
	 * 正则表达式校验
	 * 
	 * @Title: checkPattern
	 * @Description:
	 * @author gsh
	 * @date 2020年7月28日
	 * @param regular 正则
	 * @param data    数据
	 * @return
	 */
	public static boolean checkPattern(String regular, Object data) {
		if (regular == null || data == null)
			return true;
		try {
			if (regular.startsWith("/")) {
				regular = regular.substring(1, regular.length());
			}
			if (regular.endsWith("/")) {
				regular = regular.substring(0, regular.length() - 1);
			}
			if (!Pattern.compile(regular).matcher(data.toString()).matches()) {
				return false;
			}
		} catch (Exception e) {
			log.error("error-info", e);
		}
		return true;
	}

	public static void main(String[] args) {
		System.out.println(checkPattern("^1(3|4|5|7|8|9)\\d{9}$", "134222233333"));
	}
}
